package controller;

import java.util.ArrayList;
import java.util.List;

import model.Administrativo;
import model.Empleado;
import model.Encargado;
import model.Mozo;
import beans.AdministrativoBean;
import beans.EmpleadoBean;
import beans.EncargadoBean;
import beans.MozoBean;
import dao.HibernateEmpleadoDAO;
import dto.AdministrativoDTO;
import dto.EmpleadoDTO;
import dto.EncargadoDTO;
import dto.MozoDTO;

public class AdministradorEmpleado {
	private static AdministradorEmpleado instancia;
	private AdministradorEmpleado(){
		
	}
	
	public static AdministradorEmpleado getInstancia(){
		if(instancia==null)
			instancia=new AdministradorEmpleado();
		return instancia;
	}

	public void grabarEmpleado(EmpleadoDTO eDTO) {
		EmpleadoBean eBean=transformDTOtoBean(eDTO);
		HibernateEmpleadoDAO.getInstancia().grabarEmpleado(eBean);
		
	}

	public Empleado transformDTOtoModel(EmpleadoDTO eDTO) {
		Empleado e=null;
		if(eDTO!=null){
			if(eDTO.getClass().getName().contains("AdministrativoDTO")){
				e=new Administrativo(eDTO.getNombre(), eDTO.getClave());
				e.setUsuario(eDTO.getUsuario());
			}
			if(eDTO.getClass().getName().contains("EncargadoDTO")){
				e=new Encargado(eDTO.getNombre(), eDTO.getClave());
				e.setUsuario(eDTO.getUsuario());
				}
			if(eDTO.getClass().getName().contains("MozoDTO")){
				MozoDTO mozodto=(MozoDTO)eDTO;
				e=new Mozo(eDTO.getNombre(), eDTO.getClave(),mozodto.getPorcentajeComision());
				e.setUsuario(eDTO.getUsuario());
			}
		}
			
		return e;
	}
	
	public EmpleadoDTO transformModeltoDTO(Empleado e) {
		EmpleadoDTO eDTO=null;
		if(e!=null){
			if(e.getClass().getName().contains("AdministrativoDTO")){
				eDTO=new AdministrativoDTO(e.getNombre(), e.getClave());
				eDTO.setUsuario(e.getUsuario());
			}
				
			if(e.getClass().getName().contains("EncargadoDTO")){
				eDTO=new EncargadoDTO(e.getNombre(), e.getClave());
				eDTO.setUsuario(e.getUsuario());
			}
			if(e.getClass().getName().contains("MozoDTO")){
				Mozo mozodto=(Mozo)e;
				eDTO=new MozoDTO(e.getNombre(), e.getClave(),mozodto.getPorcentajeComision());
				eDTO.setUsuario(e.getUsuario());
			}
		}
			
		return eDTO;
	}
	
	public EmpleadoBean transformDTOtoBean(EmpleadoDTO eDTO){
		EmpleadoBean e=null;
		if(eDTO!=null){
			if(eDTO.getClass().getName().contains("AdministrativoDTO")){
				e=new AdministrativoBean(eDTO.getNombre(), eDTO.getClave());
				e.setUsuario(eDTO.getUsuario());
			}
				
			if(eDTO.getClass().getName().contains("EncargadoDTO")){
				e=new EncargadoBean(eDTO.getNombre(), eDTO.getClave());
				e.setUsuario(eDTO.getUsuario());
			}
				
			if(eDTO.getClass().getName().contains("MozoDTO")){
				MozoDTO mozodto=(MozoDTO)eDTO;
				e=new MozoBean(eDTO.getNombre(), eDTO.getClave(),mozodto.getPorcentajeComision());
				e.setUsuario(eDTO.getUsuario());
			}
		}
			
		return e;
	}
	
	
	public EmpleadoBean transformModeltoBean(Empleado e){
		EmpleadoBean eb=null;
		if(e!=null){
			if(e.getClass().getName().contains("Administrativo")){
				eb=new AdministrativoBean(e.getNombre(), e.getClave());
				eb.setUsuario(e.getUsuario());
				eb.setIdEmpleado(e.getId());
			}
				
			if(e.getClass().getName().contains("Encargado")){
				eb=new EncargadoBean(e.getNombre(), e.getClave());
				eb.setUsuario(e.getUsuario());
				eb.setIdEmpleado(e.getId());
			}
				
			if(e.getClass().getName().contains("Mozo")){
				Mozo mozodto=(Mozo)e;
				eb=new MozoBean(e.getNombre(), e.getClave(),mozodto.getPorcentajeComision());
				eb.setUsuario(e.getUsuario());
				eb.setIdEmpleado(e.getId());
			}	
		}
		return eb;
	}
	
	public Empleado transformBeantoModel(EmpleadoBean eBean){
		Empleado e=null;
		if(eBean!=null){
			if(eBean.getClass().getName().contains("AdministrativoBean")){
				e=new Administrativo(eBean.getNombre(), eBean.getClave());
				e.setUsuario(eBean.getUsuario());
				e.setId(eBean.getIdEmpleado());
			}
				
			if(eBean.getClass().getName().contains("EncargadoBean")){
				e=new Encargado(eBean.getNombre(), eBean.getClave());
				e.setUsuario(eBean.getUsuario());
				e.setId(eBean.getIdEmpleado());
			}
				
			if(eBean.getClass().getName().contains("MozoBean")){
				MozoBean mozodto=(MozoBean)eBean;
				e=new Mozo(eBean.getNombre(), eBean.getClave(),mozodto.getPorcentajeComision());
				e.setUsuario(eBean.getUsuario());
				e.setId(eBean.getIdEmpleado());
			}
		}
			
		return e;
	}

	public Mozo buscarMozoPorUsuario(String user1) {
		MozoBean mozob=new MozoBean();
		mozob.setNombre(user1);
		mozob=(MozoBean) HibernateEmpleadoDAO.getInstancia().buscarMozoPorUsuario(mozob);
		if(mozob!=null)
			return (Mozo) transformBeantoModel(mozob);
		else
			return null;
	}

	public Encargado buscarEncargadoPorUsuario(String user1) {
		EncargadoBean encargadob=new EncargadoBean();
		encargadob.setUsuario(user1);
		encargadob=(EncargadoBean) HibernateEmpleadoDAO.getInstancia().buscarEncargadoPorUsuario(encargadob);
		if(encargadob!=null)
			return (Encargado) transformBeantoModel(encargadob);
		else
			return null;
	}

	public Administrativo buscarAdministrativoPorUsuario(String user1) {
		AdministrativoBean administrativob=new AdministrativoBean();
		administrativob.setNombre(user1);
		administrativob=(AdministrativoBean) HibernateEmpleadoDAO.getInstancia().buscarAdministrativoPorUsuario(administrativob);
		if(administrativob!=null)
			return (Administrativo) transformBeantoModel(administrativob);
		else
			return null;
	}

	public int buscarNroSucursalPorMozo(Mozo mozo) {
		int nro=HibernateEmpleadoDAO.getInstancia().buscarNroSucursalPorMozo(this.transformModeltoBean(mozo));
		return nro;
	}

	public int buscarNroSucursalPorAdministrativo(Administrativo administrativo) {
		int nro=HibernateEmpleadoDAO.getInstancia().buscarNroSucursalPorAdministrativo(this.transformModeltoBean(administrativo));
		return nro;
	}

	public int buscarNroSucursalPorEncargado(Encargado encargado) {
		int nro=HibernateEmpleadoDAO.getInstancia().buscarNroSucursalPorEncargado(this.transformModeltoBean(encargado));
		return nro;
	}

	public List<EncargadoBean> transformModeltoBean(List<Encargado> encargados) {
		List<EncargadoBean> encargadosb=new ArrayList<EncargadoBean>();
		for (Encargado encargado : encargados) {
			EncargadoBean encargadob=(EncargadoBean) transformModeltoBean(encargado);
			encargadosb.add(encargadob);
		}
		return encargadosb;
	}

	public List<Encargado> transformDTOTOModel(List<EncargadoDTO> encargadosDTO) {
		List<Encargado> encargados=new ArrayList<Encargado>();
		for (EncargadoDTO encargadoDTO : encargadosDTO) {
			Encargado encargado=(Encargado) transformDTOtoModel(encargadoDTO);
			encargados.add(encargado);
		}
		return encargados;
	}

	public List<EncargadoDTO> transformModelTODTO(List<Encargado> encargados) {
		List<EncargadoDTO> encargadosDTO=new ArrayList<EncargadoDTO>();
		for (Encargado encargado : encargados) {
			EncargadoDTO encargadoDTO=(EncargadoDTO) transformModeltoDTO(encargado);
			encargadosDTO.add(encargadoDTO);
		}
		return encargadosDTO;
	}

	public List<Encargado> transformBeanTOModel(List<EncargadoBean> encargadosBean) {
		List<Encargado> encargados=new ArrayList<Encargado>();
		for (EncargadoBean encargadoBean : encargadosBean) {
			Encargado encargado=(Encargado) transformBeantoModel(encargadoBean);
			encargados.add(encargado);
		}
		return encargados;
	}
	
	public List<AdministrativoBean> transformModeltoBeanAdm(List<Administrativo> administrativos) {
		List<AdministrativoBean> administrativosb=new ArrayList<AdministrativoBean>();
		if(administrativos!=null){
		for (Administrativo administrativo : administrativos) {
			AdministrativoBean administrativob=(AdministrativoBean) transformModeltoBean(administrativo);
			administrativosb.add(administrativob);
		}
		}
		return administrativosb;
	}

	public List<Administrativo> transformDTOTOModelAdm(List<AdministrativoDTO> administrativosDTO) {
		List<Administrativo> administrativos=new ArrayList<Administrativo>();
		for (AdministrativoDTO administrativoDTO : administrativosDTO) {
			Administrativo administrativo=(Administrativo) transformDTOtoModel(administrativoDTO);
			administrativos.add(administrativo);
		}
		return administrativos;
	}

	public List<AdministrativoDTO> transformModelTODTOAdm(List<Administrativo> administrativos) {
		List<AdministrativoDTO> administrativosDTO=new ArrayList<AdministrativoDTO>();
		for (Administrativo administrativo : administrativos) {
			AdministrativoDTO administrativoDTO=(AdministrativoDTO) transformModeltoDTO(administrativo);
			administrativosDTO.add(administrativoDTO);
		}
		return administrativosDTO;
	}

	public List<Administrativo> transformBeanTOModelAdm(List<AdministrativoBean> administrativosBean) {
		List<Administrativo> administrativos=new ArrayList<Administrativo>();
		for (AdministrativoBean administrativoBean : administrativosBean) {
			Administrativo administrativo=(Administrativo) transformBeantoModel(administrativoBean);
			administrativos.add(administrativo);
		}
		return administrativos;
	}

	
	
}
